relies on several tables:

80069650	table of bytes indicating if cheat unlocked
800696A0	table of bytes indicating if cheat activated
800697F0	table of word values indicating which cheats appear in menu

7F017F5C:	menu 15 (cheat menu) constructor
	accepts: A0=?
ADDIU	SP,SP,FF68
SW	RA,005C (SP)
SW	S8,0058 (SP)
SW	S7,0054 (SP)
SW	S6,0050 (SP)
SW	S5,004C (SP)
SW	S4,0048 (SP)
SW	S3,0044 (SP)
SW	S2,0040 (SP)
SW	S1,003C (SP)
SW	S0,0038 (SP)
OR	A1,R0,R0	;A1=0: 
OR	A2,R0,R0	;A2=0: 
JAL	700046D0
OR	A3,R0,R0	;A3=0: 
JAL	70003EF8
OR	A0,V0,R0	;A0=V0: 
JAL	7F00D5E8
OR	A0,V0,R0	;A0=V0: 
JAL	7F0ACD98
OR	A0,V0,R0	;A0=V0: 
LUI	V1,8003
LW	V1,B5DC (V1)	;V1=8002B5DC: total unlocked cheats
OR	S4,V0,R0	;S4=V0: 
OR	S8,R0,R0	;S8=0
SLTI	AT,V1,000D	;AT=TRUE if 12 or fewer cheats (more than one column)
BNEZ	AT,7F017FD4	;branch if one column
OR	S1,V1,R0	;S1=V1: #unlocked
BEQ	R0,R0,7F017FD4
ADDIU	S1,R0,000C	;S1=C
//7F017FD4:	draw first column
BLEZ	S1,7F0181F0	;branch if stupid number of entries
SLL	T6,S8,0x2	;T6=cur->offset
SLL	S5,S8,0x2
ADDU	S5,S5,S8
LUI	T7,8007
ADDIU	T7,T7,97F0	;T7=800697F0: table of cheat entries appearing in the cheat folder
SLL	S5,S5,0x2	;S5=cur*0x14: y offset for each entry
LUI	S7,8004
LUI	S6,8004
ADDIU	S6,S6,0EB8	;S6=80040EB8: [80169534] ? table of entries 0x14 in size
ADDIU	S7,S7,0EB4	;S7=80040EB4: [80169290] ? table
ADDIU	S5,S5,0035	;S5=cur*0x14 + 0x35: add base y position
ADDU	S3,T6,T7	;S3=800697F0+offset: cheat register
//7F018008:
JAL	7F092774	;V0= p->text for cheat A0
LW	A0,0000 (S3)	;A0=cheat toggle
LW	T8,0000 (S7)
OR	S2,V0,R0
ADDIU	A0,SP,0080
ADDIU	A1,SP,007C
OR	A2,V0,R0
LW	A3,0000 (S6)
SW	R0,0014 (SP)
JAL	7F0AE98C
SW	T8,0010 (SP)
LUI	T9,8003
LW	T9,B5E0 (T9)	;T9=8002B5E0: 
ADDIU	V0,R0,0037	;V0=0x37: x position
SW	V0,0088 (SP)	;SP+88= x position
BNE	S8,T9,7F018090
SW	S5,0084 (SP)	;SP+84= y position
JAL	7F00A39C
NOP
BNEZ	V0,7F018090
LW	V1,0084 (SP)	;V1=SP+84: y position
LW	V0,0088 (SP)	;V0=SP+88: x position
LW	T0,007C (SP)	;T0=SP+7C: width of text?
ADDIU	T1,V1,000E	;T1=y pos+0xE: bottom of "text box"
ADDIU	T2,R0,0032	;T2=0x32: x position -5, accounting for left border
ADDU	A3,V0,T0	;A3=x position + str width
ADDIU	A3,A3,0005	;A3+=5: right border
SW	T2,0014 (SP)	;SP+14=T2: left x position
SW	T1,0010 (SP)	;SP+10=T1: bottom y pos
OR	A0,S4,R0	;A0=S4: p->DL target
ADDIU	A2,V1,FFFF	;A2=V1-1: upper y pos, accounting for upper border
JAL	7F0AD014	;generates display list...
ADDIU	A1,V0,FFFE	;A1=V0-2: x pos -2, accounting for border
OR	S4,V0,R0	;S4=V0: new DL target
//7F018090:
JAL	7000441C
NOP
SLL	S0,V0,0x10
SRA	T3,S0,0x10
JAL	7000442C
OR	S0,T3,R0
LW	T4,0000 (S6)
LW	T5,0000 (S7)
ADDIU	T6,R0,00FF
SW	T6,0018 (SP)
OR	A0,S4,R0
ADDIU	A1,SP,0088	;A1=SP+88: p->x position
ADDIU	A2,SP,0084	;A2=SP+84: p->y position
OR	A3,S2,R0
SW	S0,001C (SP)
SW	V0,0020 (SP)
SW	R0,0024 (SP)
SW	R0,0028 (SP)
SW	T4,0010 (SP)
JAL	7F009760	;load palette and display text
SW	T5,0014 (SP)
LW	T7,0000 (S3)
LUI	T8,8007
OR	S4,V0,R0
ADDU	T8,T8,T7
LBU	T8,96A0 (T8)	;T8=800696A0+offset: TRUE if cheat ON
ORI	S1,R0,9C74	;S1=text ID 9C74: "OFF\n"
BEQ	T8,R0,7F01810C
NOP
BEQ	R0,R0,7F01810C
ORI	S1,R0,9C73	;S1=text ID 9C73: "ON\n"
//7F01810C:
JAL	7F0C1DD8	;V0=p->text ID
OR	A0,S1,R0	;A0=S1: text ID to display
LW	T9,0000 (S7)
OR	S2,V0,R0
ADDIU	A0,SP,0080
ADDIU	A1,SP,007C
OR	A2,V0,R0
LW	A3,0000 (S6)
SW	R0,0014 (SP)
JAL	7F0AE98C
SW	T9,0010 (SP)
LW	T0,0000 (S3)
LUI	T1,8007
ADDIU	V0,R0,00B3
ADDU	T1,T1,T0
LBU	T1,96A0 (T1)	;T1=800696A0+offset: TRUE if cheat ON
SW	V0,0088 (SP)
SW	S5,0084 (SP)
BEQ	T1,R0,7F018168	;branch if OFF
ADDIU	S1,R0,00FF	;S1=000000FF: black
LUI	S1,A000
BEQ	R0,R0,7F018168	;S1=A00000FF if ON: red
ORI	S1,S1,00FF
//7F018168:
JAL	7000441C	;V0= halfword @ 800232A8: 
NOP
SLL	S0,V0,0x10
SRA	T2,S0,0x10
JAL	7000442C
OR	S0,T2,R0
LW	T3,0000 (S6)
LW	T4,0000 (S7)
OR	A0,S4,R0	;A0=S4: p->DL target
ADDIU	A1,SP,0088	;A1=SP+88: p->x pos
ADDIU	A2,SP,0084	;A2=SP+84: p->y pos
OR	A3,S2,R0	;A3=S2: p->text
SW	S1,0018 (SP)	;SP+18=S1: font color
SW	S0,001C (SP)	;SP+1C=S0: maximum width (always writes first entry)
SW	V0,0020 (SP)	;SP+20=V0: maximum height (always writes first entry)
SW	R0,0024 (SP)	;SP+24=0:  y offset
SW	R0,0028 (SP)	;SP+28=0:  x offset
SW	T3,0010 (SP)	;SP+10=T3: p->second font table?
JAL	7F009760	;writes text to screen
SW	T4,0014 (SP)	;SP+14=T4: p->first font table?
//7F0181B8:	detect if second column applicable
LUI	V1,8003
LW	V1,B5DC (V1)
ADDIU	S8,S8,0001
ADDIU	S3,S3,0004
SLTI	AT,V1,000D
ADDIU	S5,S5,0014
BNEZ	AT,7F0181E0
OR	S4,V0,R0
BEQ	R0,R0,7F0181E4
ADDIU	S1,R0,000C
//7F0181E0:
OR	S1,V1,R0
//7F0181E4:
SLT	AT,S8,S1
BNEZ	AT,7F018008
NOP
//7F0181F0:
LUI	S6,8004
LUI	S7,8004
SLTI	AT,V1,000D
ADDIU	S7,S7,0EB4
BNEZ	AT,7F0183F8	;branch if no cheats will appear in column 2
ADDIU	S6,S6,0EB8
ADDIU	T5,V1,FFF4
BLEZ	T5,7F0183F8
OR	S8,R0,R0
LUI	S3,8007
ADDIU	S3,S3,97F0	;T7=800697F0: table of cheat entries appearing in the cheat folder
ADDIU	S5,R0,0035	;S5=0x35
JAL	7F092774	;V0= p->text for cheat A0
LW	A0,0030 (S3)
LW	T6,0000 (S7)
OR	S2,V0,R0
ADDIU	A0,SP,0080
ADDIU	A1,SP,007C
OR	A2,V0,R0
LW	A3,0000 (S6)
SW	R0,0014 (SP)
JAL	7F0AE98C
SW	T6,0010 (SP)
LUI	T8,8003
LW	T8,B5E0 (T8)
ADDIU	V0,R0,00DC
ADDIU	T7,S8,000C
SW	V0,0088 (SP)
BNE	T7,T8,7F0182AC
SW	S5,0084 (SP)
JAL	7F00A39C
NOP
BNEZ	V0,7F0182AC
LW	V1,0084 (SP)
LW	V0,0088 (SP)
LW	T9,007C (SP)
ADDIU	T0,V1,000E
ADDIU	T1,R0,0032
ADDU	A3,V0,T9
ADDIU	A3,A3,0005
SW	T1,0014 (SP)
SW	T0,0010 (SP)
OR	A0,S4,R0
ADDIU	A2,V1,FFFF
JAL	7F0AD014
ADDIU	A1,V0,FFFE
OR	S4,V0,R0
JAL	7000441C
NOP
SLL	S0,V0,0x10
SRA	T2,S0,0x10
JAL	7000442C
OR	S0,T2,R0
LW	T3,0000 (S6)
LW	T4,0000 (S7)
ADDIU	T5,R0,00FF
SW	T5,0018 (SP)
OR	A0,S4,R0
ADDIU	A1,SP,0088
ADDIU	A2,SP,0084
OR	A3,S2,R0
SW	S0,001C (SP)
SW	V0,0020 (SP)
SW	R0,0024 (SP)
SW	R0,0028 (SP)
SW	T3,0010 (SP)
JAL	7F009760
SW	T4,0014 (SP)
LW	T6,0030 (S3)
LUI	T7,8007
OR	S4,V0,R0
ADDU	T7,T7,T6
LBU	T7,96A0 (T7)	;T7=800696A0+offset: TRUE if "ON"
ORI	S1,R0,9C74	;S1=text ID 9C74: "OFF\n"
BEQ	T7,R0,7F018328
NOP
BEQ	R0,R0,7F018328
ORI	S1,R0,9C73	;S1=text ID 9C73: "ON\n"
//7F018328:
JAL	7F0C1DD8	;V0=p->text
OR	A0,S1,R0	;A0=S1: text ID
LW	T8,0000 (S7)
OR	S2,V0,R0
ADDIU	A0,SP,0080
ADDIU	A1,SP,007C
OR	A2,V0,R0
LW	A3,0000 (S6)
SW	R0,0014 (SP)
JAL	7F0AE98C
SW	T8,0010 (SP)
LW	T9,0030 (S3)
LUI	T0,8007
ADDIU	V0,R0,0158
ADDU	T0,T0,T9
LBU	T0,96A0 (T0)
SW	V0,0088 (SP)
SW	S5,0084 (SP)
BEQ	T0,R0,7F018384
ADDIU	S1,R0,00FF
LUI	S1,A000
BEQ	R0,R0,7F018384
ORI	S1,S1,00FF
JAL	7000441C
NOP
SLL	S0,V0,0x10
SRA	T1,S0,0x10
JAL	7000442C
OR	S0,T1,R0
LW	T2,0000 (S6)
LW	T3,0000 (S7)
OR	A0,S4,R0
ADDIU	A1,SP,0088
ADDIU	A2,SP,0084
OR	A3,S2,R0
SW	S1,0018 (SP)
SW	S0,001C (SP)
SW	V0,0020 (SP)
SW	R0,0024 (SP)
SW	R0,0028 (SP)
SW	T2,0010 (SP)
JAL	7F009760
SW	T3,0014 (SP)
LUI	T4,8003
LW	T4,B5DC (T4)
ADDIU	S8,S8,0001
ADDIU	S3,S3,0004
ADDIU	T5,T4,FFF4
SLT	AT,S8,T5
ADDIU	S5,S5,0014
BNEZ	AT,7F018220
OR	S4,V0,R0
JAL	7F00A238
OR	A0,S4,R0
JAL	7F009F08
OR	A0,V0,R0
LW	RA,005C (SP)
LW	S0,0038 (SP)
LW	S1,003C (SP)
LW	S2,0040 (SP)
LW	S3,0044 (SP)
LW	S4,0048 (SP)
LW	S5,004C (SP)
LW	S6,0050 (SP)
LW	S7,0054 (SP)
LW	S8,0058 (SP)
JR	RA
ADDIU	SP,SP,0098
